{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import vectorbt as vbt\n",
    "import vectorbt.optimizer.gridsearch as grids"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from importlib import reload\n",
    "import matplotlib\n",
    "matplotlib.rcParams['figure.figsize'] = (12, 5)\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "done. 0.33s\n"
     ]
    }
   ],
   "source": [
    "ohlc_df = vbt.data.load_cryptopair('USDT_BCH', vbt.data.ago_dt(days=180), vbt.data.now_dt(), period=vbt.data.Period.D1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "rate_sr = ohlc_df.O"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "fees = 0.0025\n",
    "slippage_factor = 0.25\n",
    "slippage = (ohlc_df['H'] - ohlc_df['L']) * slippage_factor / rate_sr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   count        mean        std    min         25%    50%      75%  \\\n",
      "O  107.0  618.707827  350.94529  297.9  377.671259  530.0  629.625   \n",
      "\n",
      "           max  \n",
      "O  1717.031055  \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtAAAAEyCAYAAADTM+eIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3WlsnFd+7/nvqSpWsYriIu6rSEkktZDUYi22LEu2bLfT\nSRq3A2RgOJggHdwgjUwaN8HMYHLTd17klQdBT5CZyYtu3EZubncwd9LXuMhMN4JOx+622pbbkrUv\npMRFFkWRFPd9KdZ65gWrGIriziKrKP4+AKHiU+epOpRE8len/s//GGstIiIiIiKyOo5kT0BERERE\nZDtRgBYRERERWQMFaBERERGRNVCAFhERERFZAwVoEREREZE1UIAWEREREVkDBWgRERERkTVQgBYR\nERERWQMFaBERERGRNXAlewIryc/Pt1VVVcmehoiIiIi8wG7cuDForS1YzdiUD9BVVVVcv3492dMQ\nERERkReYMaZjtWNVwiEiIiIisgYK0CIiIiIia6AALSIiIiKyBgrQIiIiIiJroAAtIiIiIrIGCtAi\nIiIisqm+853vcPHixWXHXLx4ke985ztbNKONUYAWERERkU116tQp3n333SVD9MWLF3n33Xc5derU\nFs9sfRSgRURERGRTXbhwgQ8++GDREB0Pzx988AEXLlxI0gzXRgFaRERERDbdYiF6O4Zn2AY7EYqI\niIjIi2F+iP793/99fvCDH2y78AxagRYRERGRLXThwgW+9rWv8Vd/9Vf80R/90bYLz6AALSIiIiJb\n6OLFi/zjP/4jv/3bv833vve9FbtzpCIFaBERERHZEvGa5z/90z/l3Xff5a//+q+X7c6RqhSgRURE\nRGTTxcPzf/yP/5H6+noA9u3bt2R3jlSmAC0iIiIim2p+t426ujoASktLGRgY4PXXX992IVoBWkRE\nREQ21bVr1+a6bYyMjOD1etmzZw+hUIjR0dG57hzXrl1L9lRXRW3sRERERGRT/dmf/dnc7dHRUXJy\ncigoKACgv7+f3NxcLly4sG06cmgFWkRERES2RDgcZmJigt27d+P1esnMzGRgYCDZ01ozBWgRERER\n2RJjY2NYa8nJyQGgsLCQgYEBotFokme2NgrQIiIiIrJq165do7GxcV3njoyMALB7925gNkCHw+G5\n49uFaqBFREREZNW6u7sJBoNkZWWxZ8+eNZ07OjqK2+3G5/MBPFMHnZeXl/C5bhatQIuIiIjIqkSj\n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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11b738da0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "vbt.graphics.plot_line(rate_sr)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# number of positions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "param_range = list(range(2, 100)) * 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def random_returns_func(n):\n",
    "    pos_sr = vbt.positions.random(rate_sr, n)\n",
    "    equity_sr = vbt.equity.from_positions(rate_sr, pos_sr, fees, slippage)\n",
    "    returns_sr = vbt.returns.from_equity(equity_sr)\n",
    "    return returns_sr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cores: 4\n",
      "processes: 1\n",
      "starmap: False\n",
      "calcs: 9800 (~28.79s) ..\n",
      "done. 14.23s\n"
     ]
    }
   ],
   "source": [
    "random_returns_srmap = grids.srmap.from_func(random_returns_func, param_range)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cores: 4\n",
      "processes: 1\n",
      "starmap: False\n",
      "calcs: 98 (~0.21s) ..\n",
      "done. 0.06s\n",
      "min 92: -0.991910138533\n",
      "max 15: 2.64190724742\n"
     ]
    }
   ],
   "source": [
    "random_profit_nummap = grids.nummap.from_srmap(random_returns_srmap, vbt.performance.profit)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     count      mean      std       min       25%       50%       75%     max\n",
      "50%   98.0 -0.265274  0.60074 -0.943084 -0.847081 -0.395848  0.284516  2.1507\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n6Zy7NHKqXVJlhsrC7PmSpE9LSo07xnVfvFZL6pL0dyPTc/7WzArENV/UnHOtkv6HpPOSLknqd879\nWFz3bDHZdc5YxlvMwRlZxMyWSPoXSZ9yzg2MP+eG11xk3cVFxMzeI6nTObdvsjZc90XHJ+lGSV9z\nzm2XFNJV/3uea774jMxpvV/Df3BaIanAzH5zfBuue3aYL9d5MQfnVkk1496vHDmGRcbM/BoOzd92\nzv1g5HCHmVWNnK+S1Jmp+jArbpf0XjM7q+FpWPeY2T+K676YXZR00Tn36sj772s4SHPNF7e3Szrj\nnOtyzsUl/UDSbeK6Z4vJrnPGMt5iDs6NkurNbLWZBTQ8ifyJDNeENDMz0/Ccx2bn3P8cd+oJSb81\n8vq3JP1ormvD7HHOfdY5t9I5V6fhf7Z/5pz7TXHdFy3nXLukC2a2YeTQL0tqEtd8sTsv6VYzyx/5\n9/0va/heFq57dpjsOj8h6WEzyzGz1ZLqJe2Zi4IW9c6BZnafhudBeiV90zn3ZxkuCWlmZndIelHS\nYb0+1/VzGp7n/LikWknnJD3onLv6pgMsAmZ2t6T/xzn3HjMrFdd90TKzbRq+GTQg6bSkj2h4AIhr\nvoiZ2f8r6SENr6L0mqSPSloirvuiYmbfkXS3pDJJHZL+m6R/1STX2cz+RNJva/jvi085556ekzoX\nc3AGAAAA0mUxT9UAAAAA0obgDAAAAEwDwRkAAACYBoIzAAAAMA0EZwAAAGAaCM4AAADANBCcAQAA\ngGn4/wFIvn7x7WayywAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x121f64630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "random_nummap_desc = random_profit_nummap.groupby(random_profit_nummap.index).describe()\n",
    "vbt.graphics.plot_line(random_nummap_desc['50%'].rolling(window=30, min_periods=1).mean(), 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MA crossover, cross-validated"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cores: 4\n",
      "processes: 1\n",
      "starmap: False\n",
      "calcs: 100 (~0.07s) ..\n",
      "done. 0.04s\n"
     ]
    }
   ],
   "source": [
    "ma_func = lambda window: vbt.indicators.EMA(rate_sr, window)\n",
    "min_ma, max_ma, step = 1, 100, 1\n",
    "N = 5\n",
    "slices = grids.params.slices(rate_sr, N)\n",
    "\n",
    "param_range = grids.params.range_params(min_ma, max_ma, step)\n",
    "mamap = grids.srmap.from_func(ma_func, param_range)\n",
    "\n",
    "param_space = grids.params.combine_rep_params(min_ma, max_ma, step, 2)\n",
    "param_space = grids.params.multiply(list(range(len(slices))), param_space)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Func\n",
    "def ma_returns_func(slice_idx, fast_ma, slow_ma):\n",
    "    # Precalculation\n",
    "    sliced_rate_sr = rate_sr.iloc[slices[slice_idx]]\n",
    "    fast_ma_sr = mamap[fast_ma].iloc[slices[slice_idx]]\n",
    "    slow_ma_sr = mamap[slow_ma].iloc[slices[slice_idx]]\n",
    "    \n",
    "    entries = vbt.signals.DMAC_entries(fast_ma_sr, slow_ma_sr)\n",
    "    entries = vbt.bitvector.first(entries)\n",
    "    exits = vbt.signals.DMAC_exits(fast_ma_sr, slow_ma_sr)\n",
    "    exits = vbt.bitvector.first(exits)\n",
    "    \n",
    "    pos_sr = vbt.positions.from_signals(rate_sr, entries, exits)\n",
    "    equity_sr = vbt.equity.from_positions(sliced_rate_sr, pos_sr, fees, slippage)\n",
    "    returns_sr = vbt.returns.from_equity(equity_sr)\n",
    "    return returns_sr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cores: 4\n",
      "processes: 1\n",
      "starmap: True\n",
      "calcs: 25250 (~85.65s) ..\n",
      "done. 42.16s\n"
     ]
    }
   ],
   "source": [
    "ma_returns_srmap = grids.srmap.from_func(ma_returns_func, param_space)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cores: 4\n",
      "processes: 1\n",
      "starmap: False\n",
      "calcs: 25250 (~23.07s) ..\n",
      "done. 10.81s\n",
      "min (0, 1, 6): -0.412461426311\n",
      "max (0, 2, 4): 0.145226551745\n"
     ]
    }
   ],
   "source": [
    "ma_nummap = grids.nummap.from_srmap(ma_returns_srmap, vbt.performance.profit)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "done. 1.40s\n"
     ]
    }
   ],
   "source": [
    "ma_nummap_desc = ma_nummap.groupby(list(zip(*ma_nummap.index))[1:]).describe()\n",
    "ma_matrix = grids.matrix.from_nummap(ma_nummap_desc['std'], symmetric=True).fillna(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     count     mean      std  min  25%  50%  75%       max\n",
      "0  10000.0  0.00274  0.01669  0.0  0.0  0.0  0.0  0.184458\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x121f6cef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cmap = plt.cm.rainbow\n",
    "norm = plt.Normalize()\n",
    "matplotlib.rcParams['figure.figsize'] = (12, 9)\n",
    "grids.matrix.plot(ma_matrix_df, cmap, norm)\n",
    "matplotlib.rcParams['figure.figsize'] = (12, 5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda root]",
   "language": "python",
   "name": "conda-root-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
